home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
docs
/
mags
/
saku17.lha
/
Teksti
/
Tekoelämä.txt
< prev
next >
Wrap
Text File
|
1996-03-01
|
13KB
|
363 lines
5
1
10 tekoelämä1.IFF 0 0
11 tekoelämä2.IFF 0 0*
{A Elämää tietokoneessa?
{A ---------------------
{7 Petri Keckman
{c Esimerkkikuvat ovat sivuilla 11 & 12
Mitä on elämä? Miten se kehittyy? Miten mieli toimii? Ovatko molemmat vain
materian liikettä?
Vastaavanlaiset kysymykset ovat varmasti askarruttaneet ihmisapinan mieltä jo
siitä lähtien, kun saimme ensimmäiset orastavat tuntemukset siitä, että olemme
jotain mikä on olemassa: jo vuosimiljoonia ennen Platonia (synt. 427 eKr.) tai
Descartesia ja "Cogito, ergo sum":ia 1600-luvulla.
Tämän päivän tekoelämän ja tekoälyn tutkijat ovat tuomassa omaa
vastauksentynkäänsä näihin kysymyksiin. Asiaa pohdittiin aivan vakavasti(?) myös
Tiede 2000 -lehden (5/95) artikkelissa "Luomisen kahdeksas päivä?", jossa
todetaan: "Tekoelämän tutkimus on biologiaa elektronisessa muodossa.
Tietokoneiden avulla halutaan paljastaa elämän syvin olemus - ja kehittää uutta
elämää."
Minua ovat aina puistattattaneet puheet tietokoneella aikaansaadusta
tekoelämästä.
"Tieteellisellä toiminnalla" on kulttuurissamme hyvin suuri arvovalta ja se
siirtyy myös artikkeleille, joita julkaistaan Tiede 2000 -lehdessä. Asemaansa
tiede on aikoinaan päässyt syrjäyttämällä uskonnolliset ja myyttiset
maailmankuvat. Tiede nähdään toimintana, joka tuottaa "tietoa", joka on
varmemmalla pohjalla kuin muut, esimerkiksi uskonnolliset, maagiset tai
taiteeseen perustuvat ihmis- ja elämänkäsitykset. Tiede aikoinaan syrjäytti
uskonnon kuitenkin lähinnä vain materian lainalaisuuksien tutkimisessa.
Ja nyt siis "tieteellisesti" pohditaan vakavasti, ovatko ne prosessit, joita
tietokoneella aikaansaadaan samaa kuin elämä?! Kaikki tietokoneen toiminta on
palautettavissa siihen, että jos jotkin sähkövaraukset (syötebitit) ovat vaikka
101011 ja jotkin bitit (ohjelma) ovat 101001, niin ne määräävät tiettyjen
sääntöjen perusteella (prosessorin toiminta), että tulosteeksi tulee jotkin
bitit, esimerkiksi 1101010. Tämän tulosteen annetaan sitten aiheuttaa tiettyjä
aisteilla havaittavissa olevia ilmiöitä näyttöpäätteessä, robotin käsivarressa
tai muussa tulostinlaitteessa. Siinä se on tasan koko homma eikä mitään muuta.
Tietokone ei käsittele edes numeroita eikä laske. Sen voidaan tulkita tekevän
niin vasta sen jälkeen, kun olemassa elävä ja tietävä olento, joka antaa niille
sähkövarauksille sellaiset tulkinnat, että ne ovat joitain sellaisia tietomme
kohteena olevia olioita, joita kutsumme numeroiksi. Yhtä hyvin voisi väittää
melkein minkä tahansa fyysisen materian toiminnan kuvaavan "elämän syvintä
olemusta". Annamme vain näille havaintokentässämme tapahtuville tapahtumille
sellaisen semanttisen tulkinnan: muodostamme tietyn kielen, jossa tietyillä
materiaalisilla tapahtumilla ovat tietyt tiedolliset vastineet mielessämme.
Tekoelämää tutkivat ovat pyrkineet luomaan laskennallisia prosesseja, joiden
mahdollista elävyyttä he aivan vakavissaan pohtivat. Tällaisia ovat mm. ns.
soluautomaatit. Niissä noudatetaan tiettyjä yksinkertaisia algoritmillisia
periaatteita, joiden tuloksena syntyy näyttöpäätteelle tulosteita (joiden
toiminta kuvaa elämän syvintä olemusta! Hah hah!). Esimerkiksi:
1) Jokainen kuvaruudun piste (solu), jolla on kaksi tai kolme elävää
naapuria, selviää hengissä seuraavalle sukupolvelle.
2) Jokainen solu, jolla on nolla tai yksi naapuria "kuolee" (yksinäisyyteen)
(yksinäisyyteen), ja jokainen piste jolla on neljä tai useampia naapureita
kuolee (liikakansoitukseen).
3) Jokainen kuollut solu, jolla on tasan kolme elävää naapuria synnyttää
uuden solun.
Samat periaatteet voidaan sanoa myös toisin:
1) Jos pikseli ei ole päällä niin se tulee päälle, jos sillä on tasan kolme
päällä olevaa viereistä pikseliä.
2) Jos pikseli on päällä, niin se sammuu, jos sillä on nolla tai yksi päällä
olevaa viereistä pikseliä. Samoin se sammuu, jos vieressä on useampia kuin
kolme pikseliä päällä.
Näillä yksinkertaisilla "syntymän", "hengissä säilymisen" ja "kuoleman"
säännöillä väitetään siis saatavan aikaiseksi jotain sellaista, josta pohditaan,
onko se elämää. Pohtisivat edes vain sitä, kuvastavatko ne jollain tavalla
joitain meidän elävien ihmisten tietoja ja käsityksiä evoluution prosesseista,
mutta kun minä olen käsittänyt, että he aivan vakavissaan pohtivat sitä, ovatko
ne eläviä. Suutarit pysykööt lestissään työajalla ja pohtikoot vapaa-ajalla
kaikenkattavia selityksiä elämän syvimmästä olemuksesta, joka on meille täysi
mysteeri, vaikka me niin kiihkeästi haluaisimmekin väittää ymmärtävämme sitä.
Mielemme on aina aikansa vanki. Nyt kun tietokoneet ovat valtaamassa alaa
elämässämme ja mielessämme, pyrimme helposti projisoimaan sen käsitteitä
elämään. Taiteilijat, uskovaiset, humanistit ja psykologit näkevät elämän aivan
toisin.
Alla on AMOS-ohjelma, joka mallintaa ylläselitettyä yksinkertaista
soluautomaattia - ja elämän perimmäisintä luonnetta. Esimerkkiajossa, josta on
kuva sivulla 11 laitoin alkusyötteeksi seuraavanlaisen pistekuvion:
{c xxx
{c x x
{c x x ( Tästä on esimerkkikuva sivulla 11. Oikotie: J-näppäin )
{c x x
{c xxx
Koska alkukuva oli symmetrinen, aiheutti se luonnollisesti myöskin symmetristä
elämää. Pienikin muutos alkuparametreihin (yhden pisteen poisto) voi muuttaa
tätä tekoelämää täysin. Suuri osa muodoista päättyy tilanteeseen, josta elämä ei
enää kehity, vaan peräkkäisistä tiloista tulee samanlaiset. Esimerkki ajossa
elämä kiinnittyi stabiiliin tilaan 14. sukupolvessa. Yhden pisteen poisto
(kuva2) aiheutti sen, että elämä lähti laajenemaan. Kun tästä alkutilasta
poistin vielä yhden pisteen, jolloin alkutilanne oli tällainen,
{c xxx
{c x
{c x x ( Tästä on esimerkkikuva sivulla 12. )
{c x x
{c xxx
hävisi elämä kokonaan sukupolvessa 16.
Ne, joilla on käytössä AMOS-tulkki tai kääntäjä voivat tutkia ohjelmalla muita
tapauksia. Talleta blokki teksinkäsittelyohjelmallasi, lataa se (Load
ASCII-file) AMOS-tulkkiisi ja tutki "elämää". Ohjelma on melko hidas, koska
käytän siinä taulukoita solujen tilanteen tallettamiseen. Joka tilanteessa
täytyy jokainen solu ja sen kahdeksan naapuria tutkia erikseen. Lisäksi
seuraavaan tilanteeseen mennessä kopioidaan koko taulukko uudeksi
lähtötaulukoksi, jonka perusteella lasketaan taas seuraava tilanne. C-kieltä ja
dynaamisia muuttujia käyttäen ohjelmasta olisi tullut monta kertaluokkaa
nopeampi - mutta evoluutiohan on hidasta.
Mikäli artikkeli aiheutti mietteitä ja käytössäsi on modeemi, voit kommentoida
MBnetissä tai Epsilon Indissä, joissa silloin tällöin käyn. Toki voinet lähettää
mietteitäsi Sakuunkin: jos joku nykyajan keinotodellisuus- ja tietokonefriikki
on tosissaan sitä mieltä, että elämä ja ihmisen sielun toiminta ovat jotain
senkaltaista, että sitä voidaan mallintaa - tai jopa aikaansaada -
tietokoneella, niin olen valmis riitelemään aiheesta.
{9Rem *** Petri Keckman 1996
{9Rem *** Soluautomaatin elämää AMOSilla
{9Rem Ohjelma tuottaa tekoelämää noudattamalla yksinkertaisia
{9Rem periaatteita:
{9Rem 1) jos pikseli ei ole päällä niin se tulee päälle, jos sillä on
{9Rem tasan kolme päällä olevaa viereistä pikseliä.
{9Rem 2) Jos pikseli on päällä, niin se sammuu, jos sillä on molla tai yksi
{9Rem päällä olevaa viereistä pikseliä. Samoin se sammuu, jos vieressä on
{9Rem useampia kuin kolme päällä.
{9Rem Ohjelma piirtää vaiheista pieniä kuvia ja piirtää vanhojen päälle, kun
{9Rem kuvaruutu täyttyy.
{9
{9MX#=640
{9MY#=256
{9Screen Open 0,MX#,MY#,4,Hires
{9Flash Off : Curs Off : Cls 0
{9Colour 0,$0 : Colour 1,$F0 : Colour 2,$FF0 : Colour 3,$F00
{9
{9Rem Halutessasi voit muuttaa muuttujien RX, RY, XKPL, YKPL ja
{9Rem alkukuvan koordinaattien arvoja Data-lauseesta.
{9
{9RX=4 : RY=4 : Rem "sarjakuvaruutujen" lukumäärä, tässä 4*4
{9XKPL=16 : Rem Sarjakuvaruudussa 16*16 ruudukko soluille
{9YKPL=16
{9KPL=12 : Rem Elämän alkukuvapisteitten lukumäärä
{9Rem Elämän alkusolujen koordinaatit XKPL*YKPL ruudukossa
{9Data 6,6,7,6,8,6,9,7,10,8,9,9,8,10,7,10,6,10,5,9,4,8,5,7
{9
{9Rem Jos muutat KPL-määrää suuremmaksi, niin joudut tietysti lisäämään
{9Rem myöskin alkupisteitä, joiden koordinaatit ovat väliltä 1..XKPL
{9Rem ja 1..YKPL.
{9Rem Jos elämä kehittyessään ei mahdu sille asetettuihin raameihin,
{9Rem voit kasvattaa XKPL- ja YKPL-muuttujien arvoja. Silloin joudut
{9Rem myös muuttamaan alkukoordinaattien arvoja, jos haluat alkukuvan
{9Rem keskelle "sarjakuvaruutua" samoilla data-arvoilla. Helpommmin se
{9Rem käy, kun muutat riviltä 63 ja 64 skaalaustekijää. Jos esim. suurennat
{9Rem ruudukkoa 10:llä, niin muuta skaalaustekijä 10/2=5, ja alkukuva on
{9Rem edelleen keskellä eikä sinun tarvitse muuttaa kaikkia data-arvoja.
{9Rem Pienikin muutos voi saada elämässä suuria muutoksia aikaiseksi:
{9Rem esim. arvoilla KPL=11, XKPL=25, YKPL=25, RX=4, RY=4 elämä ei lopu
{9Rem koskaan, mutta jos tästä poistaa vain yhden pisteen (KPL=10) käyttäen
{9Rem samoja Data-lauseen arvoja, niin se häviää kokonaan sukupolvessa 16.
{9Rem Aloitetaan piirtämällä raamit elämälle:
{9
{9MARG=40 : Rem Alasjätettävä marginaali
{9LEVEYS#=(MX#-1)/RX
{9KORKEUS#=(MY#-MARG)/RY
{9Ink 3
{9For I=1 To RX : For J=1 To RY
{9Box LEVEYS#*(I-1),KORKEUS#*(J-1) To I*LEVEYS#,J*KORKEUS#
{9Next : Next : Draw MX#,0 To MX#,MY#
{9Locate 20,28 : Paper 0 : Pen 2
{9Print "ELÄMÄN SYVIN OLEMUS TEKOELÄMÄN TUTKIJOIDEN MIELESTÄ"
{9
{9Rem SOLUT0-taulukon avulla lasketaan seuraava SOLUT1-taulukko
{9Dim SOLUT0(XKPL+1,YKPL+1),SOLUT1(XKPL+1,YKPL+1)
{9
{9Rem tapetaan aluksi kaikki solut (arvo 0)
{9For I=0 To XKPL+1 : For J=0 To YKPL+1
{9 SOLUT0(I,J)=0 : SOLUT1(I,J)=0
{9Next : Next
{9LX#=LEVEYS#/XKPL : Rem yhden pisteen (solun) leveys
{9LY#=KORKEUS#/YKPL
{9If LX#<2 or LY#<2
{9 Print "Liian pieneksi meni. Pienennä muuttujia RX,RY tai XKPL,YKPL"
{9 Stop
{9End If
{9
{9Rem Asetetaan elämän spontaani alkusynty.
{9X0#=0 : Rem sarjakuvaruudun vasen yläkulma alussa
{9Y0#=0
{9For SOLU=1 To KPL
{9 Read I,J
{9 I=I+0 : Rem skaalaustekijä (tässä 0)
{9 J=J+0 : Rem skaalaustekijä (tässä 0)
{9 SOLUT0(I,J)=1 : Rem solu elää=1, kuollut=0
{9 Ink 1 : Gosub 999
{9Next
{9
{9KIERROS=2
{9Repeat : Rem Pääsilmukka, jossa pyöritään kunnes elämä ei enää kehity
{9 Locate 0,28 : Paper 0 : Ink 3
{9 Print "Sukupolvi: ";KIERROS : Add KIERROS,1
{9 Rem lasketaan seuraavan sarjakuvaruudun vasen yläkulma
{9 X0#=X0#+LEVEYS# : If X0#>MX#-LEVEYS#
{9 X0#=0 : Y0#=Y0#+KORKEUS#
{9 If Y0#>MY#-KORKEUS#-MARG : Y0#=0 : End If
{9 End If
{9 Rem tyhjennetään se ensin
{9 Ink 0 : Bar X0#+1,Y0#+1 To X0#+LEVEYS#-1,Y0#+KORKEUS#-1
{9 Rem ja aletaan laskea soluille arvoja
{9 For I=1 To XKPL
{9 For J=1 To YKPL
{9 ELAA=SOLUT0(I,J)
{9 KPL=0 : Rem Lasketaan elävät naapurisolut
{9 Rem ei lasketa solua itse sen eläväksi naapuriksi:
{9 If ELAA=1 : KPL=-1 : End If
{9 For DI=-1 To 1
{9 For DJ=-1 To 1
{9 If SOLUT0(I+DI,J+DJ)=1 : Add KPL,1 : End If
{9 Next DJ
{9 Next DI
{9 Rem tässä on varsinainen tekoelämän generaattori
{9 If ELAA=1 and(KPL=2 or KPL=3)
{9 SOLUT1(I,J)=1
{9 Ink 1 : Gosub 999 : End If
{9 If ELAA=1 and(KPL=0 or KPL=1 or KPL>3)
{9 SOLUT1(I,J)=0
{9 Ink 0 : Gosub 999 : End If
{9 If ELAA=0 and(KPL=3)
{9 SOLUT1(I,J)=1
{9 Ink 1 : Gosub 999 : End If
{9 Next
{9 Next
{9 Rem tutkitaan samojen solujen lukumäärä
{9 Rem ja siirretään SOLUT1:n alkiot SOLUT0:n alkioiksi
{9 SAMOJA=0
{9 For I=1 To XKPL : For J=1 To YKPL
{9 If SOLUT0(I,J)=SOLUT1(I,J) : Add SAMOJA,1 : End If
{9 SOLUT0(I,J)=SOLUT1(I,J) : SOLUT1(I,J)=0
{9 Next : Next
{9Until SAMOJA=XKPL*YKPL
{9Locate 0,29 : Print "Elämä jumittui."
{9End
{9Rem aliohjema solun piirtoon
{9999
{9A0#=Int(X0#+I*LX#+1.5)
{9B0#=Int(Y0#+J*LY#+1.5)
{9A1#=Int(X0#+I*LX#+LX#-0.5)
{9B1#=Int(Y0#+J*LY#+LY#-0.5)
{9If Int(A0#)=Int(A1#) or Int(B0#)=Int(B1#)
{9 Plot A0#,B0# : Draw To A1#,B1#
{9Else Bar A0#,B0# To A1#,B1# : End If
{9Return
{7 Seuraavalla kahdella sivulla on ohjelman tuottamat kuvat.